fix(angular-server): fallback to scoped+annotations when SSR DOM lacks attachShadow#30967
Open
SebastianKohler wants to merge 1 commit into
Open
Conversation
|
@SebastianKohler is attempting to deploy a commit to the Ionic Team on Vercel. A member of the Team first needs to authorize it. |
Author
|
@gnbm Are there any plans from the Ionic team to take a look at this PR? I see you are hard at work developing Angular 21 och 22 support for Ionic v9 due in Q3 2026, but does that include Angular SSR support? Angular SSR has not worked in Ionic since v8.2.2, which this PR attempts to fix. Btw, I love the fact that your focus for v9 is to "keep up" rather than implement new features 👍👍 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue number: resolves #29751
What is the current behavior?
In Angular SSR environments using a server DOM that does not implement native
attachShadow(for example Domino), Ionic server hydration can fail with:TypeError: this.attachShadow is not a functionThis occurs in the server hydrate path used by
@ionic/angular-serverwhen callinghydrateDocument(...)with the current default behavior.What is the new behavior?
This PR adds a capability check in
packages/angular-server/src/ionic-server-module.tsand applies a conditional fallback only whenattachShadowis unavailable:attachShadowis supported:clientHydrateAnnotations: false)attachShadowis not supported:serializeShadowRoot: 'scoped'clientHydrateAnnotations: trueThis keeps the current behavior for environments with native
attachShadow, while providing a compatible SSR path for Domino-like environments.Does this introduce a breaking change?
Other information
The change is intentionally scoped to
@ionic/angular-serverintegration logic and does not modify component behavior or the existingexcludeComponentslist.I could not run the full Ionic test/lint suite locally in my current Windows environment setup, so this PR relies on CI for full validation.
Note: this PR addresses the
attachShadowSSR crash path in@ionic/angular-serverby applying a conditional fallback.From upstream investigation, there is also a Stencil runtime fix in
>= 4.40.0related to non-shadow component patching (children/childNodes) that may affect Angular client hydration behavior. So full end-to-end resolution of all symptoms may also depend on the Stencil bump tracked separately.